package com.xie.extension.executor;

import java.util.function.Consumer;
import java.util.function.Function;

/**
 * @author gim
 */
//服务执行者 接口
//import java.util.function.Function; java的函数式接口
// 根据一个类型的数据得到另一个类型的数据，前者为前置条件，后者为后置条件
public interface ServiceExecutor {

  /**
   * 执行void 方法
   *
   * @param clazz
   * @param bizScene
   * @param consumer
   * @param <S>
   */
  <S> void execute(Class<S> clazz, BizScene bizScene, Consumer<S> consumer);

  /**
   * 执行有返回值的方法
   *
   * @param clazz
   * @param bizScene
   * @param function
   * @param <R>
   * @param <S>
   * @return
   */
  <R, S> R execute(Class<S> clazz, BizScene bizScene, Function<S, R> function);

}
